<?php


class RL_UnknownRequestException extends Exception {}


/**
 * RL_Request - содержит параметры запроса.
 *
 * Похож на функцию со списком аргументов
 *
 * При этом аттрибуты $object и $handler абстрактно
 * определяют действие, которое выполняет запрос
 *
 * Все остальное -- параметры данного действия.
 *
 * $env = $GLOBALS;
 * $request = RL_Request::factory($rh, $env);
 *
 * @package RL
 * @copyright Copyright (C) 2007 Jetstyle. All rights reserved.
 */
class RL_Request extends ArrayObject
{

	/**
	 * Ссылка на RH
	 *
	 * @var RL_SiteRequestHandler
	 */
	public $rh;

	/**
	 * Контекст
	 *
	 * @var RL_Context
	 */
	public $ctx;

	public $object;

	public $handler;


	/**
	 * Вернуть массив параметров запроса (кроме временных)
	 */
	public function pack()
	{
		$res = array();

		foreach ($this as $name=>$value) {
			//if ($name{0} !== '_') {
				$res[$name] = $value;
			//}
		}

		return $res;
	}

	/**
	 * Enter description here...
	 *
	 * @param array $env
	 * @return RL_Request
	 */
	public function factory ( RL_SiteRequestHandler $rh )
	{
		$request_type = NULL;
		// определяем тип запроса
		if (isset($rh->SERVER['HTTP_HOST'])) { // it's a web server!
			$request_type = 'Http';
		}

		if (!isset($request_type))
			// а, че-каво?
			throw new RL_UnknownRequestException();


		// ок. класс
		$request_class_name = 'RL_Request_'.$request_type;

		// подключаем скрипт, согласно типу запроса
		$rh->useClass($request_class_name);

		$request = new $request_class_name();
		$request->rh = $rh;

		return $request;
	}

}

